1
GeekBrains
Дипломный проект на тему: «Разработка Web приложения
автоматической отправки сообщений для увеличения эффективности
продающих менеджеров при работе с потенциальными и «холодными»
клиентами»
Студента: Кузнецов Максим Юрьевич
Тех. cпециализация: Fullstack-разработка
г. Рязань 2023 г.
2
Содержание
Введение………………………………………………………………………...……3
Глава 1. Анализ объекта и предмет исследования………………………………...6
1.1 Описание предмета и объекта исследования, постановка задачи на
проектирование………………………………………………………………………6
1.2 Анализ существующих разработок и технологий для рассылки
информационных сообщений……………………………………………………….9
1.3 Обоснование выбора средств разработки…………………………………..12
Глава 2. Разработка и написание приложения……………………………………20
2.1 Структура приложения и используемые технологии…………………………20
2.2 Разработка серверной части Веб-приложения (бизнес-логика
приложения)…………………………………………………………………….…..23
2.3 Разработка клиентской части Веб-приложения (web-
интерфейс)…………………………………………………………………………..29
2.4 Тестирование …………………………………………………………………...31
Заключение………………………………………………………………………….36
Список литературы и ссылки на дополнительные материалы………………….38
Приложения………………………………………………………………………40
3
Введение
В настоящее время совершенно немыслимо представить человечество без
средств коммуникации: почтовые службы и службы доставки, телефонная и
видео связь и, безусловно, самая многофункциональная и распространенная
связь посредством интернета. Широкие возможности цифровых коммуникаций:
мессенджеров, электронной почты, видео- и аудио конференции, различных
чатов и форумов, а в последнее время и широко распространенных служб
мгновенных сообщений (мессенджеров) делают общение нынешних людей
разноплановый, разнообразным по содержанию и широте охвата контактов.
Связь посредством рассылки мгновенных сообщений дает возможность
обеспечить моментальную коммуникацию с огромным числом людей в режиме
реального времени. Большое значение возможность обмена моментальными
текстовыми сообщениями, прикрепления к ним различного рода материалов,
документов, имеет и для современного бизнеса это повышает
коммуникационные связи между сотрудниками, отделами, рабочими группами в
разы, что дает возможность скорейшим образом реагировать на проявления
внешней среды и изменения экономической ситуации. Таким образом
выбранная тема выпускной квалификационной работы, как и разрабатываемая в
ней информационная система являются актуальными. Степень научной
разработанности проблемы. Коммуникация носит характер массовой
коммуникации, теоретические основы которой изложены в трудах зарубежных и
отечественных ученых: Беквит Г., Будовская Ю.В., Голдсмит Р., Збровская М.И.,
Котлер Ф., Левинсон Д. К., Марсден П., Рашкофф Д., Dennett, D. C., Gillett J.,
Jurvetson, S. и другие. В ходе дипломной работы разрабатывается Веб-
приложение, с помощью которого будет осуществляться автоматическая
рассылка информационных сообщений. Объектом проекта является
коммуникационная информационная среда продающих менеджеров
Акционерного общества Аскотт Деко Рус.
Предметом является автоматизированная система рассылки
информационных сообщений. Целью дипломной работы является разработка
4
Веб приложения для рассылки информационных сообщений. Для
достижения поставленной цели необходимо решить следующие задачи:
провести анализ существующих приложений;
обозначить функционал приложения, выбрать технологии написания;
реализовать программное приложение по рассылке информационных
сообщений;
произвести оценку реализованного приложения.
Теоретической базой данной дипломной работы служат научные труды и
публикации зарубежных и российских авторов в сфере информационных
технологий, проектирования баз данных и информационных систем, а также
другими, напрямую связанными с тематикой настоящей работы.
Информационную базу данной составляют публикации в научных изданиях и
периодической печати, специальная и учебная литература. Методами и
средствами дипломной работы являются: системный анализ, математическое
моделирование СУБД, информационное моделирование данных. В коде
применялись стандарты объектно-ориентированного подхода к проектированию
и программированию, сетевые технологии, WEB- приложение реализовано на
языке Java с выполнение операторов SQL-запросов и технологии java server pages
(JSP). Основными обозначенными критериями для разработки информационной
системы являлись следующие: универсальность, адаптивность и простота
автономного использования пользователем разрабатываемой системы,
возможность интеграции с существующими, уже эксплуатируемыми
инструментальными средствами.
Практическая значимость исследования определяется тем, что материал
данной работы и его результаты могут частично или полностью найти
применение в коммерческих организациях, осуществляющих свою деятельность
в сфере торговли и продаж. Основными структурными элементами проекта
являются: самостоятельный программный продукт, предоставляемый на
цифровом носителе; пояснительная записка; графический материал.
5
Структура и объем работы. Работа состоит из введения, двух разделов,
заключения, списка использованной литературы, приложения и презентации.
6
Глава 1. Анализ объекта и предмет исследования.
1.1. Описание предмета и объекта исследования, постановка задачи на
проектирование
Объектом разработки информационной системы является акционерное
общество Аскотт Деко Рус. В рамках выполнения дипломного проекта
поставлена задача разработать Веб приложение для обмена служебными
данными в виде текстовых файлов, файлов изображений, между продающими
менеджерами и потенциальными и действующими покупателями.
Приложение разрабатывается для продающих менеджеров компании,
одновременно поддерживающих контакт с огромной группой потенциальных и
действующих клиентов. Организация работы с приложением предполагает, что
пользователь может со своим минимальным участием организовать
автоматическую рассылку огромному количеству пользователей, в
установленное время. Данный продукт ориентирован на организацию удаленной
работы с сообщениями для пользователей. До того, как начать проектирование
необходимо определить цель проекта. Изменение ситуации после успешного
осуществления проекта это определение цели. Уменьшение затрачиваемого
времени на рассылку информационных сообщений и оповещений является
непосредственной целью данного проекта, это поможет увеличить
эффективность работы отдела продаж и организации, в общем. Далее определим
задачи проекта. Под задачей нужно понимать, определенные результаты,
которые необходимы для решения проблем, что, конечно, нужно достигнуть в
результате проекта.
Отметим задачи, описанные далее:
простота дизайна и использования;
интеграцию с другими инструментами;
оптимизация.
7
В настоящее время сервисы для обмена мгновенными сообщениями
становятся все более популярными, это связано со многими факторами, в числе
которых:
1. Бесплатность. Все наиболее распространенные приложения бесплатны,
что делает их использование выгоднее простой отправки смс сообщения с
телефона, так как пользователем оплачивается только интернет трафик,
стоимость которого снижается из года в год.
2. Кастомизируемость. Возможность изменить настройки приложений для
конкретного пользователя, такие как: изображение контакта, имя, статус,
настройка времени оповещений, черные списки, использование различных тем
для приложения и пр.
3. Более широкие возможности. Помимо отправки текста, приложения
поддерживают отправку медиа-контента (изображения, звуковые файлы,
бинарные файлы), использование эмотиконок и стикеров в тексте сообщений,
поддержку аудио/видео звонков и пр. На момент написания данной дипломной
работы существовали следующие наиболее популярные сервисы для обмена
сообщениями:
«Viber» - позволяет отправлять сообщения и звонить другим
пользователям «Viber» в любой сети и стране мира. Существует для
мобильных платформ и компьютеров под управлением Windows,
Linux и OSX;
«WhatsApp Messenger» - кроссплатформенное приложение,
позволяющее обмениваться сообщениями. Приложение доступно
только для мобильных платформ. Кроме стандартного обмена
сообщениями пользователи WhatsApp могут создавать группы,
отправлять друг другу неограниченное число сообщений,
фотографий, аудио- и видеофайлов;
«WeChat» поддерживает текстовые сообщения, передачу голосовых
сообщений, рассылку сообщений множеству адресатов,
возможность делиться фотографиями и видео. Существует для
8
мобильных 9 платформ, имеется клиент для OSX и web-
приложение;
«Telegram» - бесплатный кроссплатформенный мессенджер для
смартфонов и других устройств, позволяющий обмениваться
текстовыми сообщениями и медиа-файлами различных форматов.
Основная задача данной дипломной работы это создание
отказоустойчивого сервиса для рассылки сообщений.
Данную задачу можно разбить на следующие подзадачи:
- Подготовка и настройка необходимого программного обеспечения для
выделенной серверной части;
- Разработка программного обеспечения серверной части;
- Разработка клиентских приложений для взаимодействия с сервером;
- Запуск сервиса в эксплуатацию.
Основные возможности сервиса: хранение и выдача информации;
рассылка сообщений другим пользователям в автоматическом режиме;
возможность использования эмотиконок в тексте сообщений; интеграция с
телефонной книгой (для пользователей мобильного приложения); динамическое
обновление данных для обеспечения быстрого получения и быстрой доставки
сообщений.
9
1.2. Анализ существующих разработок и технологий для рассылки
информационных сообщений
В первую очередь, проведём обзор существующих приложений.
Мессенджеры являются самым популярным средством общения в сети. В
Топ10 самых используемых приложений на мобильных платформах (по данным
компании Kleiner Perkins Caufield Byers) шесть — это мессенджеры - WhatsApp,
Facebook Messenger, LINE, Viber, и WeChat соответственно. И все они имеют
некоторые недостатки, такие как закрытый исходный код, реализация только под
определенные платформы, слабая степень защиты. Практически все компании
наравне с электронной почтой и сотовой связью используют в альтернативные
каналы связи для решения вопросов комплексной рассылки сообщений. Это
могут быть приложения для видеосвязи, мессенджеры, социальные сети,
например: Skype, WhatsApp, Viber.
Однако вышеперечисленные приложения имеют ряд недостатков:
сотрудники часто пользуются разными приложениями для обмена информацией;
в контакт-листе мессенджеров присутствуют контакты, которые не имеют
отношения к работе, например, родственники и друзья. Для удобства
коммуникаций и работы внутри компании, а также для компенсации
вышеперечисленных недостатков используются корпоративные мессенджеры.
Достоинства корпоративных мессенджеров: повышение скорости
коммуникации в решении рабочих вопросов и разделение потоков общения.
Специализированные мессенджеры могут акцентировать их внимание на
решении исключительно рабочих вопросов, позволяя не отвлекаться и не
засорять корпоративную почту лишней информацией; командная работа и
возможность сведения воедино нескольких информационных потоков; экономия
внутренних технических ресурсов компании. Готовые мессенджеры, как
правило, работают по принципу «облачных хранилищ» данных, и позволяют
организации сэкономить место на серверах и снизить затраты на создание и
обслуживание собственного сервиса коммуникации.
10
На рынке существует множество программных продуктов для
коммуникаций внутри рабочей команды.
Ниже рассмотрены некоторые из них:
Staply. Мессенджер с проектным функционалом. Позволяет: составить
иерархию групп; создавать задачи, задавать сроки, важность и
ответственность в рабочих группах; осуществлять контроль над группами;
Slack. Корпоративный мессенджер с поддержкой интеграции с десятками
сторонних сервисов. Объединяет в одном окне обсуждения в общих темах
(каналах), приватных группах и личных сообщениях. Позволяет
осуществлять видеозвонки; хранить сообщения без доступа к сети;
HipChat. Представляет собой групповой чат, видеочат для команд и
компаний с возможностями обмена файлами и демонстрацией экрана;
Битрикс24. Система управления внутренним информационным ресурсом
компании для коллективной работы над задачами, проектами и
документами, для эффективных внутренних коммуникаций. Позволяет
контролировать, делегировать, оценивать задачи; создавать резервные
копии в нескольких местах; работать в нескольких комнатах
одновременно.
На основе функций аналогов и поставленных задач можно выделить
следующие критерии для сравнения:
интеграция со сторонними сервисами;
создание иерархии групп; распределение управляющим участников
по ролям;
возможность контроля управляющим над группами;
резервное копирование в нескольких местах; работа в нескольких
комнатах одновременно;
настраиваемое оформление;
инструменты;
оффлайн-сообщения;
11
сохранение истории сообщений.
Далее рассмотрим технологии создания приложения для рассылки
информационных сообщений. Веб-приложение - клиент-серверное приложение,
оно позволяет при помощи браузера клиенту взаимодействовать с сервером,
несомненно веб сервер отвечает за сервер. Логика веб-приложения распределена
между клиентом и сервером, данные хранят в основном на сервере,
соответственно обмен информацией осуществляется по сети. Данный подход
позволяет клиентам не быть зависимыми, непосредственно от определенной
операционной системы пользователя, поэтому веб-приложение можно назвать
межплатформенным что, несомненно, можно назвать преимуществом.
«Клиент-сервер» - сетевая или вычислительная архитектура, в ней сетевая
нагрузка или задания распределяются между заказчиками услуг, соответственно
клиентами и поставщиками услуг, которые называют серверами. Технология
«клиент-сервер» осуществляется непосредственно серверной и клиентской
частями, из которых состоит веб-приложение. Формирование запросов к
серверу, кроме этого, обработка ответов от него и реализацию пользовательского
интерфейса осуществляется клиентской частью. Код клиентской части написан
с использованием HTML, CSS и Java. Серверная часть получает запрос от
клиента, выполняет вычисления, после этого формирует веб-страницу и
отправляет её клиенту по сети с использованием протокола HTTP. Код серверной
части будет написан на языке программирования Java. Проект разработан с
использованием база данных - postgresql 13.3 и пользовательский интерфейс для
нее - pg-admin - для надежного хранения данных приложения.
Благодаря данному разделению увеличивается вероятность вторичного
применения.
12
1.3 Обоснование выбора средств разработки
HTML является стандартным языком разметки документов во
Всемирной паутине. Соответственно большую часть веб-страниц создают при
помощи языка HTML (или XHTML). Язык HTML распознается браузерами, и,
конечно, отображают его в виде документа, с которым удобно работать человеку.
HTML представляет собой приложение («частным случаем») SGML (типового
обобщённого языка разметки) и, конечно, отвечает международному стандарту
ISO 8879. XHTML в свою очередь является приложением XML. Ученый из
Великобритании Тим Бернерс-Ли разработал язык HTML приблизительно в
1986—1991 годах в стенах Европейского совета по ядерным исследованиям в
Женеве (Швейцария). HTML был создан для возможности обмена научной и
технической документацией, которую смогут использовать люди не
специализирующиеся непосредственно в области вёрстки. Несомненно, HTML
хорошо справился с проблемой сложности SGML путём определения
незначительного набора семантических и структурных элементов
дескрипторов, которые чаще всего называют «тегами». Несомненно, пользуясь
HTML можно легко создать простой, красиво оформленный документ. Не считая
упрощения структуры документа, в HTML добавлена поддержка гипертекста.
Стоит отметить, что внедрение мультимедийных возможностей произошло
позже. Обработка и отображение текстовых документов, содержащие разметку
на языке HTML (такие документы обычно обладают расширением .html или.
him), осуществляют специальные приложения. Браузеры дают пользователю
возможность запрашивать и просматривать веб-страницы в удобном интерфейсе
вывода на иные внешние устройства) и, при необходимости, конечно,
отправлять введённые пользователем данные на сервер.
HTML теговый язык разметки документов. Тегами обозначают начало
и конец всех элементов, из которых состоит любой документ на языке HTML. В
свою очередь элементы могут быть пустыми, другими словами, они не будут
содержать никакого текста и других данных (например, тег перевода строки
). В таком случае наиболее часто не указывают закрывающий тег. К тому же, у
13
элементов могут быть атрибуты, устанавливающие те или иные свойства
(например, размер шрифта для элемента font). Атрибуты указывают в
открывающем теге.
CSS - формальный язык. То какой будет внешний вид документа,
написанного с использованием языка разметки, описывают при помощи CSS.
Рассматриваемый язык чаще всего используют как средство описания, того, как
будет оформлен внешний вид веб-страниц, безусловно, написанных с помощью
языков разметки HTML и XHTML, кроме того, можно применять к любым XML-
документам, например, к SVG или XUL. CSS создатели веб-страниц использует
для задания шрифтов, цветов, расположения отдельных блоков и других
аспектов внешнего вида веб-страниц. 19 CSS язык разработали, чтобы разделить
описание логической структуры вебстраницы (осуществляемое с помощью
HTML или других языков разметки) от описания внешнего вида этой веб-
страницы (осуществляемое непосредственно с помощью формального языка
CSS). Подобное разделение может повысить доступность документа,
предоставить большую гибкость и возможность управления его представлением,
вдобавок снизить сложность и повторы в структурном содержимом. Кроме
этого, CSS даёт возможность представить один документ в разнообразных
стилях или методах вывода, например экранное представление, печатное
представление, чтение голосом, специальным голосовым браузером или
программой чтения с экрана.
Java является языком ООП подхода, то есть следует объектно-
ориентированной парадигме. Это делает его языком общего назначения. Java
придерживается принципа: «Написал один раз, а потом используешь, где
хочешь». Язык используется в различных сферах, будь то мобильные
приложения, сетевые или корпоративные. Плюсы языка. ООП (Объектно-
ориентированное программирование). Данный язык программирования имеет
концепцию ООП. Таким образом мы можем не просто указать тип данных и
структуру, а также определить некий набор функций присущий его типу. Тем
самым наша структура данных стала объектом, с которым можно
14
взаимодействовать для создания связей с другими объектами. Java
высокоуровневый язык с довольно простым синтаксисом и хорошим подходом к
освоению. Язык похож на наш привычный разговорный. Такие языки
преобразуются с помощью компиляторов и интерпретаторов, что делает JAVA
языком высокого уровня. Это значительно позволяет упростить разработку,
делая ее простой для писания кода, а также его чтения и модерирования.
Стандарт для корпоративных вычислительных систем. Отличительной
характеристикой Java еще с 90х годов являются корпоративные приложения. В
те года компании начали поиск безопасного и надежного инструмента
программирования, отличное от Си. Java имеет очень много различных
библиотек в свое арсенале. Они помогаю в разработке функций, которые,
несомненно, помогут организации. Язык широко известен по миру. Его
использует и преподают в большинстве университетов и даже школ. В ТГУ тоже
преподают данный язык. Его возможности удивляют, многие провайдеры
предпочитают Java, так как язык легок в обслуживании, работать с ним можно с
любой системы, и он дешевый в администрировании. Стабильность и
сообщество. Oracle компания, которой принадлежат права на язык
программирования. Большое количество времени корпорация обильно
поддерживает развитие языка и развивает сообщество вокруг него. Этому
способствует изобилие различных приложений на JVM. Постоянно выходят
обновления и новые версии с новыми возможностями. Многопоточность. Самой
малой единицей обработки данных в программировании является поток. Для
того чтобы максимизировать КПД процессора, люди придумали запускать
несколько потоков одновременно. Их количество будет завесить от мощности
процессора и кол-ва его ядер. Java это умеет, а значит ещё один плюс в копилку.
Автоматическое управление памятью (АММ). Чтобы писать код для управления
памятью на Java людям не нужно делать это руками, как например в Си. АММ
(Automatic Memory Management) также используется в языке Swift и при очистке
памяти приложениями, которые этим занимаются. Минусы языка. Платное
коммерческое использование. Компания Oracle не так давно объявляла, что
15
начнет брать деньги за свой продукт Java 8 в целях улучшения программного
обеспечения. За новые обновления и фикс багов придется платить. Сумма будет
разной для разных групп лиц. Заявление было еще в 2019г. и с того времени ни
что не мешало мне пользоваться языком. Так что возможно в будущем меня это
коснется. Многословный и сложный код. Код очень большой, это так. Длинные
и чрезвычайно сложные операторы затрудняют изучение. Многие считают, что
так проще будет разобраться в коде, но для меня это не так. Как и С++, Java
высокоуровневый язык программирования. Им свойственно иметь большой
развернутый код. Так его лучше будет понять неспециалистом, ведь они 21
смогут детальней разобрать операторы. Но это делает код громоздким и менее
компактным. Низкая производительность. Как и у своих сверстников Java имеет
довольно низкую производительность. Все языки высокого уровня имеет низкую
производительность. Это связано с компиляцией при помощи виртуальной
машины. Но это не единственная проблема. Если плохо настроить процедуру
хеширования это приведет к чрезмерному использованию памяти. Может
произойти взаимная блокировка потоков. Виной этому послужит попытка поток
получить доступ к одному ресурсу. Здесь появится ошибка из-за нехватки
памяти, но это можно решить если умело планировать работу
В качестве языка разработки подключения к базе данных был выбран java
17 (бэкенд) и фреймворк Hibernate - для взаимодействия java кода и sql-
скриптов для БД.
Важным элементом для написания на любом языке программирования
является понимание объектно-ориентированной парадигмы, которая сейчас
очень распространена в промышленной разработке.
Объектно-ориентированное программирование (ООП) это парадигма
программирования, основанная на концепции объектов, которые могут
содержать данные (атрибуты) и функции (методы), работающие с этими
данными. ООП это мощная парадигма программирования, которую можно
использовать для создания более модульного, повторно используемого и
поддерживаемого кода.
16
Однако количество кода растёт по экспоненте с количеством классов, которые
вы внедряете по мере разработки.
Существует четыре основных принципа ООП:
1. Инкапсуляция. Относится к практике сокрытия внутренних деталей
объекта от внешнего мира и раскрытия только общедоступного
интерфейса, который можно использовать для взаимодействия с объектом.
Это помогает защитить целостность объекта и упрощает поддержку и
изменение кода с течением времени.
2. Абстракция. Относится к практике представления сложных систем или
понятий с использованием более простых и общих понятий. Абстракция
позволяет нам сосредоточиться на основных характеристиках объекта и
игнорировать детали, которые не имеют отношения к нашей текущей
задаче.
3. Наследование. Относится к практике создания новых классов, которые
наследуют атрибуты и методы существующих классов. Наследование
позволяет нам повторно использовать код и создавать более
специализированные классы, основанные на функциональности более
общих классов.
4. Полиморфизм. Относится к практике использования одного интерфейса
для представления нескольких типов объектов. Полиморфизм позволяет
нам писать более общий код, который может работать с широким спектром
объектов, без необходимости знать конкретные детали каждого объекта.
Большинство open source проектов размещаются в GitHub и я рекомендую
поступать также. Это не только даёт вам возможность поделиться кодом с
коллегами, но и работать совместно над проектом со специалистами из разных
стран.
Стоит заострить внимание на аспекте README.md файла, который
создаётся для каждого репозитория. Некоторые разработчики пренебрегают
созданием этого файла потому что не осознают до конца всей важности его
наличия и влияния на сообщество.
17
README.md это файл в репозитории GitHub, который служит файлом
документации для репозитория. Он написан в формате Markdown и
предоставляет информацию о назначении репозитория, инструкции по
установке, примеры использования и любую другую информацию касательно
содержимого проекта, например, примеры оформления баг-репортов или
способы связаться с автором для совместной разработки.
Файл README.md важен, потому что он помогает пользователям понять
назначение и использование репозитория. Он также предоставляет важную
информацию, которая может помочь пользователям быстро и легко начать
работу с репозиторием. Кроме того, наличие хорошо написанного файла
README.md может помочь привлечь участников в репозиторий и улучшить
совместную работу.
Часто вам потребуется читать и составлять подобные файлы, а также
поддерживать их в актуальном состоянии. Поэтому важно понимать, что должен
содержать такой файл.
Название: название вашего проекта или репозитория.
Описание: краткое описание того, что делает ваш проект или репозиторий.
Оглавление: список разделов в вашем файле README.md, если файл
получился объёмным.
Установка: инструкции по установке и настройке вашего проекта или
репозитория.
Использование: инструкции по использованию вашего проекта или
репозитория.
Участие: рекомендации о том, как внести свой вклад в ваш проект или
репозиторий (опционально).
Лицензия: информация о лицензии вашего проекта или репозитория.
Вы можете использовать синтаксис Markdown для форматирования
контента и добавления заголовков, списков, изображений, ссылок и других
элементов.
18
Я перевел на русский язык удобную и информативную инструкцию по
применению разметки Markdown с оригинальной Markdown Cheatsheet by Adam
Pritchard специально для тех, кому комфортнее читать актуальную
документацию на родном языке. Обязательно советую ознакомиться с ней или
другими источниками.
Отметим, что автоматизация тестирования тесно связана с разработкой,
поскольку является продуктом в продукте (ваш тестовый фреймворк можно
считать полноценным приложением). Поэтому без уверенного знания системы
контроля версий работать практически невозможно. А без надлежащего
оформления сопутствующей документации проекта вы уже через месяц забудете
какие команды нужно использовать, чтобы получить необходимые результаты.
Кроме того, отсутствие актуальной документации не только приведёт к трате
времени на объяснение того, как работает ваш проект, но и в целом ухудшает
потенциальное качество проекта.
Система контроля версий это программное обеспечение, которое
позволяет хранить историю изменений в любом документе или файле. Таким
образом, вы можете легко просматривать и откатывать изменения, сделанные
каким-либо участником проекта. Это очень полезно, когда необходимо
восстановить старую версию документа или сравнить две разные версии файла.
Кроме того, она позволяет отслеживать, кто и что изменил в документе или
файле и помогает избежать конфликтов при одновременном редактировании
одного и того же файла.
Система контроля версий Git является распределенной, она используется
для отслеживания изменений в файлах и директориях проекта. Позволяет
разработчикам контролировать и отслеживать изменения в проекте.
Чтобы работать с Git, необходимо инициализировать репозиторий в папке
с проектом. После этого можно добавлять изменения в репозиторий, создавая
различные версии проекта. Можно также просматривать историю изменений и
откатываться к любой предыдущей версии. Также можно объединять работы
различных разработчиков в один проект.
19
Я рекомендую начать изучение Git в игровой форме на сайте
LearnGitBranching, которое позволит вам изучить все основные возможности и
команды.
Большинство современных сред разработки поддерживают интуитивно
понятный интерфейс для работы с системой контроля версий Git и вам не надо
знать наизусть все команды.
20
2. Разработка и написание приложения.
2.1 Структура приложения и используемые технологии.
Для написания приложения сформулируем его функционал или
техническое задание.
Написать веб-приложение, которое будет в установленный день недели и
время отправлять загруженные для отправки файлы. Файлы должны
отправляться на адреса, находящиеся в списке. С одной стороны, в приложении
загружаются файлы в формате пдф. С другой стороны, указываются адреса
рассылки. Если время и дата не указаны, то файлы не отправляются. В этом
случае приложение информирует пользователя о невозможности отправки. (так
как не проставлено дата или время). В назначенный день и час приложение
отправляет рассылку того файла, который указан по времени и дате. Рассылка
делается на все адреса, загруженные в список для отправки. Если список адресов
не загружен, то приложение информирует пользователя о невозможности
отправки сообщений (так как нет списка адресов). Интерфейс пользователя
имеет несколько окон. Одно для загрузки адресов, а другое для загрузки файлов
PDF. В любой момент времени есть кнопка начать отправку и восстановить
отправку. А также функционал контроля отправленных сообщений.
Для реализации web-приложения мной использована клиент- серверная
архитектура, она представляет собой совокупность взаимодействующих
компонент двух типов – клиентов и серверов. Клиенты обращаются к серверам с
запросами, сервера их обрабатывают и возвращают результат. В этом случае в
качестве сервера выступает мой компьютер, обеспечивающий выполнение
запросов клиента, который в свою очередь реализует интерфейс пользователя
(Приложение 1).
Наше приложение приложение автоматической отправки сообщений
потенциальным и действующим клиентам состоит из 2 больших частей: клиента
(web-интерфейс) и сервера (бизнес-логика приложения).
1.Бэкенд или сервер (бизнес-логика приложения).
21
Среду разработки я выбрал Inteliij Idea - для написания java-кода она
оптимально подходит для работы с выбранным языком программирования. За
основу взял язык программирования - java 17 (бэкенд). Использовал Spring
Framework и версию фреймворка spring-boot версии 2.7.4 . Он нужен для более
высокоуровневой работы с вебом и ускорения процесса разработки.
SpringSecurity я использовал для разделения пользователей по ролям и правам
доступа к определенным url.
Так же мне понадобилась библиотека io.jsonwebtoken:jjwt версии 0.9.1 для
работы с токенами для пользовательских запросов, хранящими в себе
информацию в зашифрованном виде о пользователе, пославшем запрос.
Применил SpringEvent - как одну из реализаций паттерна проектирования pub-
sub - для ослабления связей между компонентами приложения.
Использован Hibernate - фреймворк для взаимодействия java кода и sql-
скриптов для БД. Spring-data взята как обертка для hibernate, идущая "из
коробки" со SpringFramework для облегчения взаимодействия с hibernate.
В приложении база данных использовал postgresql 13.3 и пользовательский
интерфейс для нее - pg-admin - для надежного хранения данных своего
приложения. В качестве валидатора использовал Spring-boot-validation он
ставится вместе с SpringFramework по умолчанию. Это нужно для проверки
введенных пользователем данных, передсохранением в БД.
Пригодилась библиотека liquibase для создания таблиц в БД по
прописанному шаблону и контроля изменений в этих таблицах. Небольшая
библиотека от Apache - commons версии 2.13.0 , а также, зависимая от нее
библиотека commons-fileupload версии 1.5 - для проверки mime type приходящих
файлов также использовалась в приложении.
Библиотека com. yandex.android:disk-restapi-sdk:1.03 была использована
как обертка для апи Яндекса, т.к ЯндексДиск используется в качестве облачного
хранилища файлов-вложений для email. Для реализации отправки email была
использована Spring-mail версии 3.0.4 по smtp протоколу. А для представления
письма в виде html мне понадобился spring-boot-starter-thymeleaf - шаблонизатор
22
html страниц . Для повышения читаемости кода lombok версии 1.18.26. Docker
нужен для запуска тестовой БД в виртуальном контейнере, требуется для
технологии testContainers.
Подключена библиотека TestContainers версии 1.17.6 - для покрытия
контроллеров интеграционными тестами. Еще библиотека junit версии 1.17.6 -
для покрытия кода unit-тестами. И сборщик проектов gradle версии 7.6.1 - для
подключения к проекту сторонних библиотек а также сборки самого проекта.
2.Фронтенд или клиентская часть (web-интерфейс)
Среды разработки для этой части использовалось две:
- Inteliij Idea - для написания java-кода;
-VS CODE - для написания html, css и javaScript кода.
Основной язык программирования - javaScript(фронтенд) и легкий
фреймворк-обертка для языка angularjs - первой версии (1.8.0) (без typeScript).
Также применил java версии 17 и spring-boot версии 3.1.0 как стартер-обертка
для javaScript кода. Не обошлось без html -это язык гипертекстовой разметки
страниц. Еще css - каскадные таблицы стилей, для придания хорошего внешнего
вида пользовательскому интерфейсу. И bootstrap - css-фреймворк, облегчающий
работу со стилизацией страниц.
23
2.2 Разработка серверной части Веб-приложения (бизнес-логика
приложения)
Структура серверной части веб-приложения показана на рисунке
ниже :
В данной структуре показаны все указанные в пункте 2.1 технологии.
24
Основная бизнес логика находится в папке java. В ней размещены пакеты
с классами, которые в свою очередь соответствуют определенному функционалу
данного приложения.
Пакет config содержит в себе еще два пакета:
- filter, со встроенным в него классом JwtReguestFilter. Данный класс
проверяет валидность токена авторизации.
- util, со встроенным в него классом JwtTokenUtil. Этот класс отвечает за
настройку получения токена авторизации JWT.
Кроме указанных пакетов с классами в пакете config присутствуют классы:
- MailConfig- представляет собой конфигуратор отправки сообщений по
email.
- SecurityConfig- этот класс отвечает за обработку конфигурации прав
доступа пользователей. Это настройка цепочек прав доступа, хеширование
паролей.
- SpringAsyncConfig это обработчик асинхронных событий.
- YandexApiConfig это конфигурация взаимодействия с api Яндекса.
Пакет controllers содержит несколько классов:
- AuthController это контроллер, отвечающий за выдачу прав
пользователю. Получаем токен авторизации. Имеет модель, содержащую логин
и пароль.
- MessangeController это контроллер работы с сообщениями.
- PdfLoaderController это контроллер загрузки пдф файлов.
- UserController это контроллер для работы с пользователями.
Пакет errors содержит два пакета:
- exceptions- в этом пакете хранятся классы кастомных исключений,
используемых в приложении:
- FilelOException это исключения при работе с файлом.
- RemoveFileException это исключения при удалении файла (например, из
временного хранилища).
25
- ResourseNotFoundException- этот класс отвечает за исключения,
возникающие при невозможности отыскать ресурс по заданным параметрам
(например пользователя по id).
- SengMessageException это исключения отправки сообщений.
- UserExistsException этот класс отвечает за исключения, возникающие
при создании пользователя.
- handlers- в этом пакете встроены классы:
- AsyncExceptionHandler это обработчик исключений, возникающих при
асинхронном выполнении методов.
- GlobalExceptionHandler –это обработчик исключений, возникающих в
основном потоке выполнения программы.
Кроме указанных пакетов со встроенными классами есть такие классы как:
- AppError это класс обертка, для возникающих в приложении
исключений.
- FieldsValidationsError это класс обертка, для возникающих в приложении
исключений, связанных с валидацией полей.
Пакет events содержит два пакета со встроенными в них классами:
- listeners - в нем располагаются классы:
- CreateNewUserEventListener это слушатель события создание нового
пользователя.
- RemoveTempFileEventListener - это слушатель события удаление файла из
временной директории на сервере.
- UploadToYandexDiskEventListener это слушатель события загрузки
файла на яндекс диск.
- publishers- в нем располагаются классы:
- CreateNewUserEventPublisher это продюсер события создания нового
пользователя.
- RemoveTempFileEventPublisher это продюсер создания события удаления
файлов из временного хранилища.
26
- UploadToYandexDiskEventPublisher это продюсер события загрузки
файла на Яндекс диск.
Кроме указанных пакетов со встроенными классами здесь есть классы:
- CreateNewUserEvent - этот класс отвечает за создание события добавления
нового пользователя в БД.
- RemoveTempFileEvent- этот класс отвечает за создания события удаление
из папки временного хранения.
- UploadToYandexDiskEvent в этом классе представлена модель события
загрузки файла на Яндекс диск.
Следующий пакет -mappers- в нем два класса:
- MessageMapper- в этом классе находится конвертер модели EmailContext в
сущность для хранения в БД Message, конвертер списка сущностей в список
моделей, конвертер сущностей из БД в модель для передачи по сети, конвертер
модели передачи по сети в сущность для хранения в БД.
- UserMapper конвертер модели UserDto в сущность для хранения в БД
User, конвертер списка сущностей в список моделей, конвертер сущностей из БД
в модель для передачи по сети, конвертер модели передачи по сети в сущность
для хранения в БД.
Следующий пакет -repositories- в этом пакете два пакета со встроенными
классами:
Пакет entities в нем пакет supports классами:
- MessageStatus- этот класс отвечает за статусы сообщений.
- Roles -здесь имена ролей.
Возвращаемся к классам пакета entities:
- Attashment- здесь сущность, хранящая имя файла вложения для хранения
в БД.
- Message здесь находится сущность для хранения в БД.
- Role- здесь сущность роли для хранения в БД.
- User это сущность пользователя для хранения в БД.
27
Пакет models тоже находится внутри пакета repositories и тоже имеет
классы:
- EmailContext- в этом классе модель для хранения мета -информации,
необходимой для отправки емайл.
- JwtReguest- здесь расположилась модель для хранения мета информации,
необходимой для создания токена авторизации.
- JwtResponse- здесь расположилась модель для хранения мета информации,
необходимой для получения токена авторизации.
- PathDto а здесь модель для хранения пути к файлу и предоставления его
в формате json.
- UserDto это модель, отображающая информацию о пользователе, для
передачи ее по сети.
В пакете repositories кроме классов есть еще интерфейсы. Интерфейс —
это контракт, который реализуется в некотором классе. У интерфейса не может
быть состояния, поэтому в нем нельзя использовать изменяемые поля
экземпляра. В интерфейсе могут быть только неизменяемые final-поля.
- AtachmentRepozitory- репозиторий для хранения json-оберток для имен
файлов -вложений.
- MessageRepozitory это репозиторий сущностей сообщений.
- RoleRepozitory-это репозиторий сущностей ролей.
- UserRepozitory это репозиторий сущности пользователей.
Завершает основную логику приложения пакет loaders в нем два пакета:
- pdf c классом Plodder это сервис загрузки пдф файлов с локальной
машины.
- yandex с классом YandexDiskloader это класс обертка для яндекс апи.
Также есть классы и интерфес:
- EmailServise это сервис отправки сообщений.
- Loader это общий интерфейс для классов загрузчиков данных.
- MessageServise это сервис для работы с сущностями Message.
- RoleServise- сервис для работы с сущностью Role.
28
- UserServise- сервис для работы с сущностью User.
Запускаем серверную часть приложения через класс
- EmailSenderApplication.java.
29
2.3 Разработка клиентской части Веб-приложения (web-интерфейс).
Структура клиентской части приложения представлена на рисунке.
На ней видно, что в пакете resources находится пакет static. В этом
пакете уже разместилась логика, отвечающая за фротенд приложения.
Функционально все разделено по пакетам, а уже в пакете присутствуют по
два файла. Первый файл это шаблон страницы. Он в формате HTML.
Второй файл — это логика той или иной страницы. Она в формате J.S.
30
Пакет admin в нем файл admin.html это шаблон и файл admin.js
это логика страницы администрирования приложения.
Пакет login - в нем файл login.html это шаблон страницы и файл
login.js это логика страницы входа (логина).
Пакет main в нем файл main.html это шаблон главной страницы
и файл main.js это логика главной страницы.
Пакет message- в нем файл message.html это шаблон формы
отправки сообщений и message.js это страница с формой отправки
сообщений.
Пакет messages в нем файл messages это шаблон страницы
статусов сообщений и файл messages.js это страница со списком
статусов сообщений.
Пакет user -в нем файл user.html это шаблон страницы управления
пользователями и файл user.js это логика страницы управления
пользователями.
Также есть класс UiApplication- через этот класс мы запускаем
клиентскую (пользовательскую) часть приложения.
31
2.4 Тестирование
Важным этапом в написании приложения является этап проверки, а
точнее тестирования. На этом этапе оттачивается основной функционал
приложения и выявляются баги. Для тестирования также пишется код. В
этом приложении такой код тоже написан.
Наше приложение состоит из двух частей поэтому тестировать надо
каждую часть отдельно.
В структуре серверной части код для тестирования находится в
пакете test. Структура кода для теста показана на рисунке ниже
В указанной структуре в пакете test находятся классы для проверки
работы основного функционала приложения.
Так как процесс тестирования не менее трудоемкий чем написание кода, я
в структуре проекта разместил README.md файл, в котором указал по
шаговый механизм необходимых установок с активными ссылками.
32
Сервис для рассылки email(серверная часть).
Приложение умеет рассылать сообщения(в т.ч. в виде html) с
файлами-вложениями(и без) по электронной почте.
Установка для локального тестирования:
установите Inteliij Idea от компании JetBrains.
ссылка: https://www.jetbrains.com/idea/download/
установите докер. Ссылка на туториал: https://learn.microsoft.com/ru-
ru/virtualization/windowscontainers/manage-docker/configure-docker-
daemon ещё одна ссылка:
https://www.youtube.com/watch?v=PHYRSPCD69U&t=450s
установите postgres
ссылка: https://winitpro.ru/index.php/2019/10/25/ustanovka-nastrojka-
postgresql-v-windows/
ещё одна ссылка: https://winitpro.ru/index.php/2019/10/25/ustanovka-
nastrojka-postgresql-v-windows/
создайте в postgres БД с именем email-sender (в схеме public);
склонируйте данный репозиторий на свою локальную машину
создайте на сервисе яндекса свое приложение с правами доступа: к email
пользователя, сохранению и чтению в любом месте диска. ссылка на api
Яндекса: https://yandex.ru/dev/id/doc/ru/ создание приложения Яндекс
Диск https://oauth.yandex.ru/client/new
переименуйте файл example.txt в .env
заполните поля в файле .env вашими данными. JWT-SECRET - любая
строка, чем длиннее и бессмысленней, тем надежней токен
переименуйте файл src\main\resources\db\changelog\changes\01-insert-u.xml
в 01-insert-users.xml
заполните параметр value на 10 строке почтой пользователя, который будет
админом. Строка с паролем - это зашифрованное значение 100, если хотите
вы можете поменять его, воспользовавшись сервисом ByCrypt.
Ссылка: https://bcrypt-generator.com/
33
откройте приложение в Inteliij Idea и запустите его из этой среды
разработки. Приложение работает на порту 8008.
И еще один файл помощник это HELP.md в котором размещены
активные ссылки на официальные издания.
Read Me First
The following was discovered as part of building this project:
The original package name 'com.gmail.kuznetsov.msg.sender.email-sender' is
invalid and this project uses 'com.gmail.kuznetsov.msg.sender.emailsender'
instead.
Getting Started
Reference Documentation
For further reference, please consider the following sections:
Official Gradle documentation
Spring Boot Gradle Plugin Reference Guide
Create an OCI image
Spring Data JPA
Spring Web
Flyway Migration
Guides
The following guides illustrate how to use some features concretely:
Accessing Data with JPA
Building a RESTful Web Service
Serving Web Content with Spring MVC
Building REST services with Spring
Additional Links
These additional references should also help you:
Gradle Build Scans insights for your project's build
Теперь перейдем к тестированию клиентской части приложения. В
структуре клиентской части приложения так же имеется пакет test в
котором содержится пакет java с классом для тестирования.
34
Структура показана на рисунке ниже.
Кроме того, в структуре проекта также размещен README.md файл,
в котором есть пошаговая инструкция с активными ссылками:
Чтобы приложение корректно работало, нужно запустить
серверную часть на локальном порту 8008
Установка для локального тестирования:
установите докер. Ссылка на туториал: https://learn.microsoft.com/ru-
ru/virtualization/windowscontainers/manage-docker/configure-docker-daemon
ещё одна ссылка:
https://www.youtube.com/watch?v=PHYRSPCD69U&t=450s
клонируйте этот репозиторий
из корневой папки проекта откройте терминал и выполните команду
docker-compose up -d
откройте любой браузер и в поисковой строке наберите localhost:3000
И еще один файл помощник это HELP.md в котором размещены
активные ссылки на официальные издания.
Getting Started
Reference Documentation
For further reference, please consider the following sections:
Official Gradle documentation
Spring Boot Gradle Plugin Reference Guide
Create an OCI image
Spring Web
Guides
The following guides illustrate how to use doctor features concretely:
Building a RESTful Web Service
Serving Web Content with Spring MVC
35
Building REST services with Spring
Additional Links
These additional references should also help you:
Gradle Build Scans insights for your project's build.
По этим ссылкам можно посмотреть информацию по работе с
использованными технологиями. Это если вдруг что-то пошло не по плану.
36
Заключение
Целью данной выпускной квалификационной работы является
проектирование приложения для рассылки информационных сообщений
менеджерами продаж для клиентов. В ходе проведения исследования были
рассмотрены аспекты организации работы продающих менеджеров. В
результате проведенной работы получены результаты: проведен анализ
теоретических вопросов по теме на основе научной, учебной, справочной и др.
литературы, кроме того с использованием информации, полученной с помощью
глобальных сетей; проведен анализ состояния системы организации продаж ;
разработаны модели бизнес процессов и определены направления
совершенствования системы. Использование информационных технологий для
управления организацией делает любую компанию более конкурентоспособной
за счет повышения ее управляемости. Уменьшения операционных затрат и
хорошей адаптации к изменениям рыночной конъюнктуры.
Результатом работы является разработанное web- приложение «Рассылки
сообщений». Приложение позволяет эффективно получать и отправлять
сообщения участникам процесса продаж, что позволяет оптимизировать работу
как отдельного пользователя, так и целой департамента продаж. Основной
функцией является рассылка информационных сообщений.
Данная версия программного продукта является законченным
программным продуктом. Но при этом ее можно доработать, чтобы клиенты не
только получали информацию, но и отправляли запросы.
. В результате, основным выводом дипломного проекта следует считать тот
факт, что для повышения эффективности работы департамента продаж нужно
внедрить систему быстрого и качественного оповещения своих клиентов
информацией. В результате работы было получено готовое веб- приложения,
полностью готовое к реализации. Заказчику применение данной разработки
экономически выгодно, что позволит разгрузить от рутинных операций
37
продающих менеджеров. Благодаря существенному сокращению времени
ручной работы с рассылками, разработанный продукт увеличивает
эффективность работы департамента продаж в целом. Таким образом, цель
данной выпускной квалификационной работы достигнута, все задачи,
поставленные в проекте, полностью решены.
38
Список литературы и ссылки на дополнительные материалы
1. Якобсон, А., Буч, Г., Рамбо, Дж. Унифицированный процесс разработки
программного обеспечения. Пер. с англ. - СПб: Питер, 2017.
2. Хоган, Б. HTML5 и CSS3. Веб-разработка по стандартам нового
поколения: 2-е издание / Б. Хоган. - Санкт-Петербург: Питер, 2014.
3.Современный учебник JavaScript [Электронный ресурс]. // Электронная
документация. - Режим доступа: https://learn.javascript.ru
4. Свириденко, С.С. Современные информационные технологии. / С.С.
Свириденко - М.: Инфра-М, 2018.
5. Основные языки программирования и разметки, применяющиеся в web-
разработке [Электронный ресурс] // HTML, CSS, PHP, JavaScript, SQL. -
Режим доступа: http://www.codeharmony.ru/materials/125.
6.. Орлов, С. Технологии разработки программного обеспечения. СПб.:
Питер, 2018.
7. Дэвид, Ф. A. JavaScript: учеб. / Ф.А. Дэвид.-М.: АСВ,2017.
8. Зандстра, М. PHP. Объекты, шаблоны и методики программирования:
учеб. пособие/Зандстра М.-М.: Вильямс, 2015.
9. Рейтинг языков программирования 2020 [Электронный ресурс]: URL:
https://techrocks.ru/2020/02/08/programming-languages-rank-2020.
10. Основные виды архитектур приложений // Stud24 URL:
https://www.stud24.ru/arhitecture/osnovnye-vidy-arhitektur-
prilozhenij/264324- 785939-page1.html.
Spring Framework // Wikipedia URL:
11. https://ru.wikipedia.org/wiki/Spring_Framework/
12. Docker определение // Wikipedia URL:
https://ru.wikipedia.org/wiki/Docker.
13. Чистякoва В. И. Проектирование информационных систем. Учебник
для студентов учреждений высшего профессионального образования / В.И.
Чистякoва, В.В.Белoв – М.: Академия, 2015.
39
14. Чистов, Д. В. Проектирование информационных систем. Учебник и
практикум / Д. В. Чистов, П. П. Мельников, А. В. Золотарюк, Н. Б.
Ничепорук. – М.: Юрайт, 2016.
15. Хортон А., Вайс Р. Х82 Разработка веб-приложений в ReactJS: пер. с
англ. Рагимова Р. Н. - М.: ДМК Пресс, 2016.
16. Тестирование информационных систем / [Электронный ресурс]
http://aplana.ru/services/testing/testirovanie-sistem,
17. Руководство HTML https://developer.mozilla.org/ru/docs/Web/HTML.
18. https://marketplace.visualstudio.com/items?itemName=Umoxfo.vscode-
w3cvalidation
19. Курс на степик Основы html& css https://stepik.org/course/2621/promo
20. Курс на степик Веб технологии https://stepik.org/course/154/promo
40
Приложения.
Приложение 1 Схема клиент серверного приложения
клиент
сервер
БД
41
Приложение 2 Лист рассылки 1
42
Приложение 3 Лист рассылки 2
43
Приложение 4 Лист рассылки 3
44
Приложение 5 Лист рассылки 4
45